package ModuloFilme;

import java.io.Console;
import java.util.Scanner;
import ModuloFuncionario.TelaFuncionario;

public class TelaFilme {
	
	private static Console console = System.console();
	private static Scanner Read = new Scanner(System.in);
	private static FachadaFilme fachadaFilme = FachadaFilme.getInstancia();
	
	 public static void menuFilme(){
		 	apagaTela();
	    	System.out.println("-------------------------------------");
			System.out.println("****** SOFTWARE VIDEO LOCADORA ******");
			System.out.println("-------------------------------------");
	    	System.out.println("******* MENU CADASTRO FILMES ********");
	    	System.out.println("-------------------------------------\n");
	        System.out.println("[1] Buscar");
	        System.out.println("[2] Cadastrar");
	        System.out.println("[3] Atualizar");
	        System.out.println("[4] Remover");
	        System.out.println("[0] Menu Inicial");
	        System.out.print("Opcao: ");
	        
	        char opcao = Read.next().charAt(0);
	        
	        switch(opcao) {
	            case '1': buscar();
	            break;
	            case '2': cadastrar();
	            break;
	            case '3': atualizar();
	        	break;
	            case '4': remover();
	            break;
	            case '0': TelaFuncionario.menuFuncionario();
	            break;
	            default: 
	            	System.out.println("* opcao invalida! press <<Enter>>");
	            	console.readLine();
	        		menuFilme();
	        }
	 }
	 
	// metodo apaga tela
	    private static void apagaTela(){
	    	System.out.print( "\033[H\033[2J" ); 
	    }
	 
	 private static void buscar(){
		 
		 System.out.println();
		 System.out.print("Digite o codigo do filme: ");
		 String codigo = console.readLine();
		 Filme filme = fachadaFilme.buscarFilme(codigo);
		 
		 if (filme != null) {
			 
			 apagaTela();
			 System.out.println("-------------------------------------------------");
			 System.out.println("Codigo: " + filme.getCodigo());
			 System.out.println("Titulo: " + filme.getTitulo());
			 System.out.println("Descricao: " + filme.getDescricao());
			 System.out.println("Quantidade: " + filme.getQuantidade());
			 System.out.printf("Preco: %.2f\n",filme.getPreco());
			 System.out.println("Tipo preco: " + filme.getTipoPreco());
			 System.out.println("-------------------------------------------------");
			 System.out.println("Press <<Enter>> ");
		 } else {
			 System.out.println("Filme nao encontrado! Press <<Enter>>");
	
		 }
		 
		 console.readLine();
		 menuFilme();	 
	 }
	 
	 private static void cadastrar(){
		 	
		 	System.out.println();
			System.out.print("Codigo do filme: ");
			String codigo = console.readLine();
			
			// Verifica se o codigo do filme ja esta cadastrado
			if(fachadaFilme.buscarFilme(codigo) == null){
				boolean testeNum = false;
				int quantidade = 0;
				double preco = 0;
				apagaTela();
				System.out.println("--------------- CADASTRO DE FILME ---------------");
				System.out.println("Codigo do filme: " + codigo);
				System.out.print("Titulo do filme: ");
				String titulo = console.readLine();
				System.out.print("Descricao do filme: ");
				String descricao = console.readLine();
				
					do{ // testa se é um inteiro válido
						System.out.print("Quantidade de filmes: ");
						String inteiro = console.readLine();
							try{
								quantidade = Integer.parseInt(inteiro);
								testeNum = true;
							}catch (NumberFormatException e) {
								// TODO: handle exception
								System.out.println("Valor invalido!");
							}
					}while(testeNum == false);
					
					
					testeNum = false;
	
					do{
						System.out.print("Preco do filme: ");
						String flutuante = console.readLine();
							try{
								preco = Double.parseDouble(flutuante);
								testeNum = true;
							}catch (Exception e) {
								// TODO: handle exception
								System.out.println("Valor invalido!");
							}
						
					} while(testeNum == false);
					
				System.out.print("Tipo preco: ");
				String tipoPreco = console.readLine();
				System.out.println("------------------------------------------------");
		 
				Filme filme = new Filme(codigo, titulo, descricao, quantidade, preco, tipoPreco);
		 
				boolean ok = fachadaFilme.cadastrarFilme(filme);
				
				if(ok){
					System.out.println("Cadastrado com sucesso!");
				}else{
					System.out.println("Erro ao cadastrar!");
				}
			} else {
				System.out.println("O Codigo digitado ja esta em uso!");
			}
				
			System.out.println("Press <<Enter>>");
			console.readLine();
			menuFilme();
		 
	 }
	 
	 private static void atualizar(){
		 
		 System.out.println();
		 System.out.print("Digite o codigo do filme: ");
		 String codigo = console.readLine();
		 
		 Filme filme = fachadaFilme.buscarFilme(codigo);
		 
		 if(filme != null){ // verifica se o codigo existe
			 
			 String titulo = filme.getTitulo();
			 String descricao = filme.getDescricao();
			 int quantidade = filme.getQuantidade();
			 double preco = filme.getPreco();
			 String tipoPreco = filme.getTipoPreco();
			 String opcao = null;
			 int cont = 0; //Variavel para saber se houve mudança
			 
			 apagaTela();
			 // Alterando titulo do filme
			 System.out.println("-------------------------------------------------");
			 System.out.println("Titulo: " + titulo);
			 System.out.println("Alterar digite 1, ou tecle <<Enter>> para prosseguir: ");
			 opcao = console.readLine();
			 	if(opcao.equals("1")){
			 		System.out.print("Digite o novo titulo: ");
			 		titulo = console.readLine();
			 		cont++;
			 	}
			 
			 // Alterando descrição do filme
			 System.out.println("-------------------------------------------------");
			 System.out.println("Descricao: " + descricao);
			 System.out.println("Alterar digite 1, ou tecle <<Enter>> para prosseguir: ");
			 opcao = console.readLine();
				 if(opcao.equals("1")){
					System.out.print("Digite uma nova descricao: ");
					descricao = console.readLine();
					cont++;
				}
			
			// Alterando quantidade do filme
			System.out.println("-------------------------------------------------");
			System.out.println("Quantidade: " + quantidade);
			System.out.println("Alterar digite 1, ou tecle <<Enter>> para prosseguir: ");
			opcao = console.readLine();
					if(opcao.equals("1")){
						boolean numOk = false;
						do{
							System.out.println("Digite uma nova quantidade: ");
							String quant = console.readLine();
	      
	            				try{
	            					quantidade = Integer.parseInt(quant);
	            					numOk = true;
	            				} catch (NumberFormatException e) {
	            					// TODO: handle exception
	            					System.out.println("valor invalido !");
	            				}
	            				
						} while(numOk == false);
	            		
						cont++;
					}
			// Altera o preço do filme		
			System.out.println("-------------------------------------------------");
			System.out.printf("Preco: %.2f\n",preco);
			System.out.println("Alterar digite 1, ou tecle <<Enter>> para prosseguir: ");
			opcao = console.readLine();
					if(opcao.equals("1")){
						boolean numOk = false;
						do{
							System.out.println("Digite um novo preco: ");
							String testePreco = console.readLine();
			      
			            		try{
			            			preco = Double.parseDouble(testePreco);
			            			numOk = true;
			            		} catch (NumberFormatException e) {
			            			// TODO: handle exception
			            			System.out.println("valor invalido !");
			            		}
			            				
						} while(numOk == false);
			            		
						cont++;
					}
					
			// Alterando tipoPreco do filme ( descrição, categoria do preço )
				System.out.println("-------------------------------------------------");
				System.out.println("Tipo preco: " + tipoPreco);
				System.out.println("Alterar digite 1, ou tecle <<Enter>> para prosseguir: ");
				opcao = console.readLine();
					 	if(opcao.equals("1")){
					 		System.out.print("Digite o novo tipo preco: ");
					 		tipoPreco = console.readLine();
					 		cont++;
					 	}

			 if (cont > 0 ) { //verifica se algum valor foi alterado
				// Verifica se o filme foi atualizado
	        		if(fachadaFilme.atualizarCliente(new Filme(codigo, titulo, descricao, quantidade, preco, tipoPreco))){
	        			System.out.println("Atualizado com sucesso ! press <<Enter>>");
	        			console.readLine();
	        		} else {
	        			System.out.println("Erro ao atualizar ! press <<Enter>>");
	        			console.readLine();
	        		} 
			 }
 
		 } else { // Caso o filme noa seja encontrado
			 System.out.println("Filme não encontrado! Press <<Enter>>");
			 console.readLine();
		 }
		 
		 menuFilme(); 
		 
	 }
	 
	 private static void remover(){
		 
		 System.out.println();
		 System.out.print("Digite o codigo do filme: ");
		 String codigo = console.readLine();
		 Filme filme = fachadaFilme.buscarFilme(codigo);
		 
		 if (filme != null) {
			 
			 apagaTela();
			 System.out.println("-------------------------------------------------");
			 System.out.println("Codigo: " + filme.getCodigo());
			 System.out.println("Titulo: " + filme.getTitulo());
			 System.out.println("Descricao: " + filme.getDescricao());
			 System.out.println("Quantidade: " + filme.getQuantidade());
			 System.out.printf("Preco: %.2f\n",filme.getPreco());
			 System.out.println("Tipo preco: " + filme.getTipoPreco());
			 System.out.println("-------------------------------------------------");
			 
			 char opcao;
			 boolean sair = false;
			 
			 do{ // Verifica se o usuario digitou uma opcao valida
				 System.out.print("Deseja remover? S/N:");
				 opcao = Read.next().toUpperCase().charAt(0); 
				 switch(opcao) {
				 	case 'S': 
				 		sair = true;
				 		// Verifica se foi removido com sucesso
				 		if(fachadaFilme.removerFilme(filme)){
				 			System.out.println("Removido com sucesso! Press <<enter>>");
				 			console.readLine();
							 menuFilme();
				 		}else{
				 			System.out.println("Erro ao remover! Press <<enter>>");
				 			console.readLine();
							menuFilme();
				 		}	
				 	break;
				 	case 'N': 
				 		sair = true;
				 		menuFilme();
				 		break;
				 	default: 
				 		System.out.println("* opcao invalida! press <<Enter>>");
				 }
			 } while (sair == false);
		 } else {
			 System.out.print("Filme nao encontrado! Press <<Enter>>");
			 console.readLine();
			 menuFilme();
		 } // Termino do metodo remover
		 
	 }
	

}
